Skip to content

gnoi/os: limit OS image size in ReceiveOS to prevent unbounded memory allocation #404

Open
kazisabu wants to merge 1 commit into
google:masterfrom
kazisabu:master
Open

gnoi/os: limit OS image size in ReceiveOS to prevent unbounded memory allocation #404
kazisabu wants to merge 1 commit into
google:masterfrom
kazisabu:master

Conversation

@kazisabu

Copy link
Copy Markdown

Added a maximum OS image size limit to ReceiveOS to prevent unbounded
memory allocation (DoS).

Changes made in gnoi/os/server.go:

  1. Added const maxOSImageSize = 1 << 30 (1GB) constant after
    receiveChunkSizeAck variable declaration (lines 29-31).

  2. Added a size check after bb.Write() in the TransferContent case
    of ReceiveOS that returns an error when the buffer exceeds
    maxOSImageSize (lines 186-188).

Without this fix, an authenticated client can stream unlimited chunks
to the Install RPC, causing the server to allocate memory until
OOM-killed. The existing installToken semaphore limits concurrency
to 1 but does not prevent a single session from exhausting memory.

@google-cla

google-cla Bot commented May 14, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@kazisabu

Copy link
Copy Markdown
Author

For the record, this issue has been validated as a security vulnerability by the Google VRP team. I am currently in the process of requesting a CVE ID for this issue to ensure it is documented for the community. If any maintainers are available to review the fix, I would appreciate the feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant